package com.xxzb.pack0822.多线程.多线程的实现.demo;

import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

public class FileScanner extends JFrame {
    private JButton btnScannFile;//按钮
    private JLabel lblDisFile;//label
    public FileScanner(){
        this.setTitle("文件扫描器");//设置标题
        this.setSize(1024,300);//设置窗体的宽度和高度
        this.setResizable(false);//设置窗体的大小不允许改变
        this.setLayout(null);//设置窗体的布局为null，表示自定义布局

        btnScannFile = new JButton("扫描文件");
        //设置按钮的摆放位置及宽度和高度
        btnScannFile.setBounds(860,80,150,50);
        //添加按钮的监听事件
        btnScannFile.addActionListener(new ActionListener() {
            //当按钮单击后执行的方法
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        File[] roots = File.listRoots();//获得当前电脑的所有磁盘
                        for(File rootFile : roots){

                            //扫描文件

                            scanFile(rootFile);
                        }

                    }
                }).start();
                //弹出提示框
                //JOptionPane.showMessageDialog(FileScanner.this,"hello");

            }
        });
        //将按钮添加到界面中
        this.getContentPane().add(btnScannFile);

        /**
         * 创阿金label对象
         */
        lblDisFile = new JLabel();
        //设置label的边框
        lblDisFile.setBorder(new LineBorder(Color.RED,1));
        //设置label的宽度和高度及坐标位置
        lblDisFile.setBounds(10,80,840,50);
        //将label添加界面中显示
        this.getContentPane().add(lblDisFile);


        this.setVisible(true);//设置显示窗体
    }

    /**
     * 扫描文件
     * @param file
     */
    public void scanFile(File file){
        //判断文件是否为null
        if(file!=null){
            //判断file是文件还是目录，如果是目录则获得所有的子文件
            if(file.isDirectory()){
                //获得file的所有子文件,返回文件数组
                File[] subFiles = file.listFiles();
                if(subFiles!=null && subFiles.length!=0){
                    //循环遍历子文件
                    for(File subFile : subFiles){
                        //递归调用本方法
                        scanFile(subFile);
                    }
                }
            }else if(file.isFile()){//是文件
                //获得文件路径
                String path = file.getAbsolutePath();
                System.out.println(path);
                //将文件路径在label中显示
                lblDisFile.setText(path);
            }
        }
    }

    public static void main(String[] args) {
        FileScanner fileScanner = new FileScanner();
    }
}
